package ch09_;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AllSubsets {
	public static Map<Integer, List<Integer>> allsets(int[] set) {
		int len = set.length;
		Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
		int size = (1 << len);
		for (int i = 0; i < size; i++) {
			List<Integer> list = new ArrayList<Integer>();
			for (int j = 0; j < len; j++) {
				if (((1 << j) & i) == 0) continue;
				list.add(set[j]);
			}
			map.put(i, list);
		}
		return map;
	}
	
	public static void main(String[] args) {
		int limit = 5;
		int[] set = new int[limit];
		for (int i = 0; i < limit; i++) {
			set[i] = i + 1;
		}
		Map<Integer, List<Integer>> map = allsets(set);
		for (int i = 0; i < 1 << limit; i++) {
			System.out.println(Arrays.toString(map.get(i).toArray()));
		}
	}
}
